iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
自我挑戰組

轉職未滿一年的點點滴滴系列 第 3

[Day 3] - 『轉職工作的Lessons learned』 - 資料庫轉換

  • 分享至 

  • xImage
  •  

今天來分享一下轉職後第一個工作任務:將資料從MongoDB轉到PostgreSQL

2020年10月從Alpha Camp畢業後,面試了好幾家公司,感謝一路以來的貴人相助,小弟有幸能加入現在的公司,接到的第一個工作任務就是將資料從非關聯式資料庫 - MongoDB轉移到關連式資料庫 - PostgreSQL。

首先大致介紹一下關聯式資料庫(No SQL)及非關聯式資料庫(SQL)的差別。

===NoSQL===

非關連式資料庫特點:

  1. NoSQL意思是"Not Only SQL",也就是不限定為「關聯式資料庫」的資料庫管理系統的統稱。
  2. 不支持SQL語法與SQL的邏輯,資料庫通常不使用關聯模型,也並不需要固定的結構(schema-free)。
  3. 文件資料庫(document database),NoSQL資料庫的一種,把資料存放成「文件 (documents)」,存成JSON格式,而資料由「屬性-值」(attribute-vaule pair)或陣列組成。
  4. 不講求資料同步,只求最後結果一致。

===SQL===

關聯式資料庫有特點:

  1. 資料用一個或是多個資料表(table)存放。
  2. 資料間有關聯。
  3. 以SQL(Structured Query Language 結構化查詢語言)操作。

以上介紹摘錄至SQL/NoSQL是什麼?認識資料庫管理系統DBMS

PostgreSQL是工作後才接觸到的關聯式資料庫,與之前學過MySQL,兩者操作操作起來滿類似的,所以在轉移資料庫的過程中還算順利,主要業務就是要將Mongo裡面有的表格、欄位、屬性建立在Postgres,遇到比較特別的事是Mongodb有一個獨有的欄位 _id,資料型別:ObjectId,但PostgreSQL沒有這個型別。

簡單介紹一下ObjectId:

ObjectId 長度為 12 位元組,由幾個 2-4 位元組的鏈結組成。每個鏈結代表並指定文件身份的具體內容。以下的值構成了完整的 12 位元組組合:
一個 4 位元組的值,表示自 Unix 紀元以來的秒數
一個 3 位元組的機器識別元
一個 2 位元組的程序 ID
一個 3 位元組的計數器,以隨機值開始

以上摘錄至Navicat 部落格

在轉換資料庫的過程中,需要寫入自己獨特的ObjectId,但礙於PostgreSQL沒有這個型別,解決方式是將這個欄位以varchar的方式儲存,後續新增資料時,import objectId from "objectid",就可以每次都新產一組objectId。

大家可能會有疑問,為什麼不在轉換資料庫時就直接捨棄這個ObjectId資料型別,原因其實是當時專案設計之初,就是以objectId去調用資料庫的資料,所以為了減少變更資料庫的疼痛感,就先以這種方式去處理。對自己來說是個不錯的經驗!


上一篇
[Day 2] -『 GO語言學習筆記』- GO語言簡介
下一篇
[Day 4] -『 GO語言學習筆記』- GO語言架構介紹
系列文
轉職未滿一年的點點滴滴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言